'''
第七周作业：网络爬虫基础-58同城租房信息抓取
时间：20180909
抓取示例地址：
http://bj.58.com/dashanzi/chuzu/pn1/?ClickID=1D=2
'''
# 导入文件
import requests
import re
import os

def spider_58_chuzu(_page):
	'''
	抓取58同城租房信息
	@param string url 抓取链接地址
	信息内容要求有：【标题、图片、户型、价格】
	'''

	# 定义抓取url地址
	_url = 'http://bj.58.com/dashanzi/chuzu/pn'+_page+'/?ClickID=1D=2'

	# 封装header头信息
	headers = {
		'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
		'accept-encoding':'deflate',
		'accept-language':'zh-CN,zh;q=0.9',
		'cache-control': 'max-age=0',
		'upgrade-insecure-requests': '1',
		'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
	}

	# 发送请求,获取抓取信息
	res = requests.get(_url,headers=headers)
	html = res.content.decode('utf-8')

	# 获取标题信息
	title_pat = 'target="_blank".* >[\s\S] *(.*?).</a>'
	title_list = re.findall(title_pat,html)

	# 获取户型信息
	huxing_pat = '<p class="room">(.*?)[\s] *&nbsp;&nbsp;&nbsp;&nbsp;(.*?)</p>'
	h_list = re.findall(huxing_pat,html)
	# 处理户型数据
	huxing_list = []
	for v in h_list:
		huxing_list.append(v[0]+v[1])

	# 获取价格信息
	price_pat = '<b>(\d+)</b>元/月'
	p_list = re.findall(price_pat,html)

	# 获取图片信息
	pat_pic = '<img[\s] *lazy_src="//(.*?)"'
	pic_list = re.findall(pat_pic,html)
	# print(pic_list)

	'''
	下载图片信息
	1. 定义存放图片的路径地址
	2. 拼接完整的图片链接地址然后进行下载
	'''
	# 定义图片路径地址
	img_path = './58_zufang_'+_page+'/'

	# 判断当前目录是否存在,如果存在获取图片路径否则创建目录
	thumb = []
	if os.path.exists(img_path):
		# 	获取指定文件夹中的所有文件和文件夹组成的列表
		thumb = os.listdir(img_path)
		for y in thumb:
			os.remove(img_path+y)
	else:
		os.mkdir(img_path)

	zufang_dict = {}
	x = 0
	for pic in pic_list:
		# print('开始下载第'+str(x+1)+'张图片')
		pres = requests.get('http://'+pic)
		# 以二进制写入的方式打开文件
		_file = open(img_path+str(x+1)+'.jpg','wb')
		# 写入文件
		_file.write(pres.content)
		# 关闭文件
		_file.close()

		zufang_dict['img_path'] = img_path+str(x+1)+'.jpg'
		print('第'+str(x+1)+'张图片下载完成...')
		x+=1
	
	# 将数据压入字典并且输出
	data = []
	
	for i in range(1,len(title_list)+1):
		zufang_dict['title'] = title_list[i-1]
		zufang_dict['huxing'] = huxing_list[i-1]
		zufang_dict['price'] = p_list[i-1]

		data.append(zufang_dict)

	print(data)
if __name__ == '__main__':
	while True:	
		page = input('请输入抓取页码:')
		if page == 'q':
			break
	# 定义抓取url地址
	spider_58_chuzu(page)
